1413. 逐步求和得到正数的最小值

Title

Similar Question

Solution Tips

方案一: 前缀和变体

var minStartValue = function(nums) {
    // 其实求的就是前缀和的最小值, 如果最小值小于0, 那么就得加上一个 startValue 使其为正数
	// res 是个正数, 因此默认值为 1
    let res = 1;
    let minPreSum = Number.MAX_SAFE_INTEGER;
    let preSum = 0;
    for (let i = 0; i < nums.length; i++) {
        preSum += nums[i];
        // 小贪心: 只有小于0的才考虑更新 min, 因为正数一定不会比 min 小
        // 简化一下复杂的嵌套
        if (preSum < minPreSum && preSum < 0) {
            minPreSum = preSum;
            res = Math.abs(preSum) + 1;
        }
    }

    return res;
};